Reservoir Derived Type

type, public :: Reservoir


Components

Type Visibility Attributes Name Initial
real(kind=float), public :: Pout_off
real(kind=float), public :: Qout
real(kind=float), public :: Qout_off
type(Diversion), public :: bypass

diversion channel

logical, public :: bypassIsPresent
integer(kind=short), public :: c

cell column j

integer(kind=short), public :: cout

cell column where off-stream pool outflow is discharged

logical, public :: dischargeDiverted

read observed diverted discharge when true

logical, public :: dischargeDownstream

read observed downstream discharge when true

real(kind=float), public :: eFlow(365)
integer(kind=short), public :: fileunit_out

file unit for writing results

real(kind=float), public :: freeFlow
real(kind=float), public :: freeFlowElevation
real(kind=float), public :: fullReservoirLevel

full reservoir level (m)

type(Table), public :: geometry
integer(kind=short), public :: geometryDOY(365)
logical, public :: highLevel

true when reservoir is managed for high level

integer(kind=short), public :: id
character(len=100), public :: name
type(ObservationalNetwork), public :: network
type(ObservationalNetwork), public :: networkDischargeDiverted
type(ObservationalNetwork), public :: networkDischargeDownstream
type(Reservoir), public, POINTER :: next
integer, public :: qoutRule

determines how to compute Qout

integer(kind=short), public :: r

cell row i

logical, public :: rising

override Qout calculation only when Qin discharge is rising

integer(kind=short), public :: rk

runge-kutta order

integer(kind=short), public :: rout

cell row where off-stream pool outflow is discharged

real(kind=float), public :: stage

current stage [m]

real(kind=float), public :: stageMax

maximum stage [m]

real(kind=float), public :: stageTarget

follow a target (observed) stage [m]

type(DateTime), public :: tReadNewDischargeDiverted
type(DateTime), public :: tReadNewDischargeDownstream
type(DateTime), public :: tReadNewStage
character(len=10), public :: typ

on-stream off-stream by-pass

integer(kind=short), public :: typOut

type ofoutflow: 1=free flow 2=target level

integer(kind=short), public :: unit

file unit target stage

integer(kind=short), public :: unitDischargeDiverted

file unit of observed diverted discharge

integer(kind=short), public :: unitDischargeDownstream

file unit of observed downstream discharge

type(Table), public :: weir
integer(kind=short), public :: weirDOY(365)
real(kind=float), public :: xout

x coordinate where outflow from reservoir is discharged

type(Coordinate), public :: xyz

easting, northing and elevation in real world

real(kind=float), public :: yout

y coordinate where outflow from reservoir is discharged


Source Code

TYPE Reservoir
	INTEGER(KIND = short)      :: id
	INTEGER(KIND = short)      :: rk !!runge-kutta order
	CHARACTER(LEN=100)         :: name
	CHARACTER(len=10)          :: typ !! on-stream off-stream by-pass
    TYPE (Coordinate)          :: xyz !!easting, northing and elevation in real world
	INTEGER(KIND = short)      :: r  !!cell row i
	INTEGER(KIND = short)      :: c  !!cell column j
    INTEGER(KIND = short)      :: rout  !!cell row  where off-stream pool outflow is discharged
	INTEGER(KIND = short)      :: cout  !!cell column where off-stream pool outflow is discharged
	REAL(KIND = float)         :: stage !!current stage [m]
	REAL(KIND = float)         :: stageMax !!maximum stage [m]
	REAL(KIND = float)         :: stageTarget !!follow a target (observed) stage [m]
	INTEGER(KIND = short)      :: typOut !!type ofoutflow: 1=free flow 2=target level
	INTEGER(KIND = short)      :: unit !!file unit  target stage
    INTEGER(KIND = short)      :: unitDischargeDownstream !!file unit of observed downstream discharge
    INTEGER(KIND = short)      :: unitDischargeDiverted !!file unit of observed diverted discharge
    LOGICAL                    :: dischargeDownstream  !!read observed downstream discharge when true
    LOGICAL                    :: dischargeDiverted  !!read observed diverted discharge when true
    INTEGER(KIND = short)      :: fileunit_out !!file unit for writing results
	TYPE(ObservationalNetwork) :: network ! pseudo station network of target file
    TYPE(ObservationalNetwork) :: networkDischargeDownstream ! pseudo station network of downstream discharge
    TYPE(ObservationalNetwork) :: networkDischargeDiverted ! pseudo station network of diverted discharge
	TYPE(DateTime)             :: tReadNewStage
    TYPE(DateTime)             :: tReadNewDischargeDownstream
    TYPE(DateTime)             :: tReadNewDischargeDiverted
	REAL(KIND = float)         :: Qout ! [m3/s]
    REAL(KIND = float)         :: Qout_off ! off-stream pool outflow [m3/s]
    REAL(KIND = float)         :: Pout_off ! off-stream pool outflow of previous time step [m3/s]
	REAL(KIND = float)         :: eFlow (365) !daily environmental flow [m3/s]
    REAL(KIND = float)         :: freeFlow ![m3/s] when Qin < freeFlow and stage <= freeFlowElevation Qout = Qin
    REAL(KIND = float)         :: freeFlowElevation !free flow elevation [m]
	TYPE(Table)                :: geometry !reservoir geometry and stage-discharge relationship
	TYPE(Table)                :: weir !used  by off-stream reservoirs and bypass channels
    INTEGER(KIND = short)      :: weirDOY (365) !weir function used for a given doy
    INTEGER(KIND = short)      :: geometryDOY (365) !geometry function used for a given doy
    REAL(KIND = float)         :: xout !! x coordinate where outflow from reservoir is discharged
    REAL(KIND = float)         :: yout !! y coordinate where outflow from reservoir is discharged
    LOGICAL                    :: highLevel !! true when reservoir is managed for high level
    REAL(KIND = float)         :: fullReservoirLevel !! full reservoir level (m)
    INTEGER                    :: qoutRule !!determines how to compute Qout 
    LOGICAL                    :: rising !!override Qout calculation only when Qin discharge is rising 
    TYPE (Diversion)           :: bypass !!diversion channel
    LOGICAL                    :: bypassIsPresent
    TYPE (Reservoir), POINTER  :: next  !dynamic list
    
END TYPE Reservoir